/*
 * *******************************************************************
 *   @项目名称: BHex Android
 *   @文件名称: JpushReceiver.java
 *   @Date: 18-11-29 下午4:05
 *   @Author: ppzhao
 *   @Description:
 *   @Copyright（C）: 2018 BlueHelix Inc.   All rights reserved.
 *   注意：本内容仅限于内部传阅，禁止外泄以及用于其他的商业目的.
 *  *******************************************************************
 */

package io.bhex.app.data_manager;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;

import com.google.gson.Gson;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.Iterator;

import cn.jpush.android.api.JPushInterface;
import io.bhex.app.BuildConfig;
import io.bhex.app.main.ui.MainActivity;
import io.bhex.app.utils.CommonUtil;
import io.bhex.baselib.utils.DevicesUtil;
import io.bhex.app.web.ui.WebActivity;
import io.bhex.baselib.utils.DebugLog;
import io.bhex.baselib.utils.ToastUtils;


public class JpushReceiver extends BroadcastReceiver {
    private static final String TAG = "JIGUANG-JpushReceiver";

    public static void startJpush(Context context){
        //JPushInterface.setDebugMode(true); 	// 设置开启日志,发布时请关闭日志
        JPushInterface.init(context);     		// 初始化 JPush
    }

    public static void stopJpush(Context context){
        JPushInterface.stopPush(context);
    }
    @Override
    public void onReceive(Context context, Intent intent) {
        try {
            Bundle bundle = intent.getExtras();
            DebugLog.d(TAG, "[MyReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle));

            if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
                String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);
                DebugLog.d(TAG, "[MyReceiver] 接收Registration Id : " + regId);
                PushManager.SendPushToken(context, "jpush", regId, BuildConfig.JPUSH_APPKEY);

            } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
                DebugLog.d(TAG, "[MyReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE));
                processCustomMessage(context, bundle);

            } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
                DebugLog.d(TAG, "[MyReceiver] 接收到推送下来的通知");
                int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
                DebugLog.d(TAG, "[MyReceiver] 接收到推送下来的通知的ID: " + notifactionId);

            } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
                DebugLog.d(TAG, "[MyReceiver] 用户点击打开了通知");
                if (!TextUtils.isEmpty(bundle.getString(JPushInterface.EXTRA_EXTRA))) {
                    Gson resGson = new Gson();
                    PushReceiverBean result = resGson.fromJson(bundle.getString(JPushInterface.EXTRA_EXTRA), PushReceiverBean.class);
                    if(result != null && !TextUtils.isEmpty(result.desUrl)){

                        Intent webIntent = new Intent(context, WebActivity.class);
                        webIntent.putExtra(io.bhex.app.web.WebViewFragment.URL, result.desUrl);
                        webIntent.putExtra(io.bhex.app.web.WebViewFragment.TITLE, bundle.getString(JPushInterface.EXTRA_ALERT,""));
                        if(!DevicesUtil.isAppRunning(context, CommonUtil.getPackageName(context))) {
                            webIntent.putExtra(WebActivity.INTENT_KEY_FROM_NOTIFICATION, true);
                        }
                        context.startActivity(webIntent);

                        return;
                    }
                }
                //打开自定义的Activity
                Intent i = new Intent(context, MainActivity.class);
                i.putExtras(bundle);
                //i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP );
                context.startActivity(i);

            } else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) {
                DebugLog.d(TAG, "[MyReceiver] 用户收到到RICH PUSH CALLBACK: " + bundle.getString(JPushInterface.EXTRA_EXTRA));
                //在这里根据 JPushInterface.EXTRA_EXTRA 的内容处理代码，比如打开新的Activity， 打开一个网页等..

            } else if(JPushInterface.ACTION_CONNECTION_CHANGE.equals(intent.getAction())) {
                boolean connected = intent.getBooleanExtra(JPushInterface.EXTRA_CONNECTION_CHANGE, false);
                DebugLog.w(TAG, "[MyReceiver]" + intent.getAction() +" connected state change to "+connected);
            } else {
                DebugLog.d(TAG, "[MyReceiver] Unhandled intent - " + intent.getAction());
            }
        } catch (Exception e){

        }

    }

    // 打印所有的 intent extra 数据
    private static String printBundle(Bundle bundle) {
        StringBuilder sb = new StringBuilder();
        for (String key : bundle.keySet()) {
            if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)) {
                sb.append("\nkey:" + key + ", value:" + bundle.getInt(key));
            }else if(key.equals(JPushInterface.EXTRA_CONNECTION_CHANGE)){
                sb.append("\nkey:" + key + ", value:" + bundle.getBoolean(key));
            } else if (key.equals(JPushInterface.EXTRA_EXTRA)) {
                if (TextUtils.isEmpty(bundle.getString(JPushInterface.EXTRA_EXTRA))) {
                    DebugLog.i(TAG, "This message has no Extra data");
                    continue;
                }

                try {
                    JSONObject json = new JSONObject(bundle.getString(JPushInterface.EXTRA_EXTRA));
                    Iterator<String> it =  json.keys();

                    while (it.hasNext()) {
                        String myKey = it.next();
                        sb.append("\nkey:" + key + ", value: [" +
                                myKey + " - " +json.optString(myKey) + "]");
                    }
                } catch (JSONException e) {
                    DebugLog.e(TAG, "Get message extra JSON error!");
                }

            } else {
                sb.append("\nkey:" + key + ", value:" + bundle.get(key));
            }
        }
        return sb.toString();
    }


    private void processCustomMessage(Context context, Bundle bundle) {

    }
}
